/**
 * TikTok热搜数据提取工具
 * 用于从JSON数据中提取图片地址和内容信息
 */

export interface ExtractedData {
  src: string[];
  content: string[];
}

/**
 * 从TikTok热搜数据中提取所有图片地址和内容
 * @param data - TikTok热搜JSON数据数组
 * @returns 包含所有图片地址和内容的对象
 */
export function extractTikTokData(data: any[]): ExtractedData {
  const result: ExtractedData = {
    src: [],
    content: []
  };

  // 遍历每个数据项
  data.forEach((item) => {
    // 提取所有以 "sc-dkaWxM src" 开头的键（图片地址）
    Object.keys(item).forEach((key) => {
      if (key.includes('sc-dkaWxM src')) {
        const srcValue = item[key];
        if (srcValue && typeof srcValue === 'string' && srcValue.trim() !== '') {
          result.src.push(srcValue);
        }
      }
      
      // 提取所有以 "content" 开头的键（内容信息）
      if (key.includes('content')) {
        const contentValue = item[key];
        if (contentValue && typeof contentValue === 'string' && contentValue.trim() !== '') {
          result.content.push(contentValue);
        }
      }
    });
  });

  return result;
}

/**
 * 从指定的JSON文件路径提取数据
 * @param jsonData - 已解析的JSON数据
 * @returns 提取的数据对象
 */
export function extractFromTikTokFile(jsonData: any[]): ExtractedData {
  if (!Array.isArray(jsonData)) {
    throw new Error('数据格式错误：期望数组格式');
  }

  return extractTikTokData(jsonData);
}

/**
 * 获取数据统计信息
 * @param data 提取的数据对象
 * @returns 统计信息对象
 */
export const getDataStats = (data: ExtractedData): DataStats => {
  return {
    totalImages: data.src.length,
    totalContent: data.content.length,
    uniqueImages: [...new Set(data.src)].length,
    uniqueContent: [...new Set(data.content)].length
  };
};

/**
 * 生成带日期的文件名
 * @param prefix 文件名前缀，默认为 'hot'
 * @returns 格式为 'hot-YYYY-MM-DD.json' 的文件名
 */
export const generateDateFileName = (prefix: string = 'hot'): string => {
  const now = new Date();
  const year = now.getFullYear();
  const month = String(now.getMonth() + 1).padStart(2, '0');
  const day = String(now.getDate()).padStart(2, '0');
  return `${prefix}-${year}-${month}-${day}.json`;
};

/**
 * 验证JSON文件内容
 * @param content 文件内容字符串
 * @returns 是否为有效的JSON格式
 */
export const validateJsonContent = (content: string): boolean => {
  try {
    JSON.parse(content);
    return true;
  } catch {
    return false;
  }
};

/**
 * 从上传的文件中读取JSON数据
 * @param file 上传的文件对象
 * @returns Promise<any> 解析后的JSON数据
 */
export const readJsonFile = (file: File): Promise<any> => {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    
    reader.onload = (event) => {
      try {
        const content = event.target?.result as string;
        if (!validateJsonContent(content)) {
          reject(new Error('无效的JSON格式'));
          return;
        }
        const jsonData = JSON.parse(content);
        resolve(jsonData);
      } catch (error) {
        reject(new Error('文件读取失败'));
      }
    };
    
    reader.onerror = () => {
      reject(new Error('文件读取失败'));
    };
    
    reader.readAsText(file);
  });
};